<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 创建一个新的空对象
        // this 指向这个新对象
        // 添加属性和方法
        // 返回一个新的对象

        // 具体代码如下
        function mynew(Func, ...args){
            //1 创建一个新的对象
            const obj = {}
            //2 新对象的原型指向构造函数的原型对象
            obj.__proto__ = Func.prototype
            //3 将构建函数的this指向新对象
            let result = Func.apply(obj,args)
            //4 根据返回值判断
            return result instanceof Object ? result : obj
        }

        // 测试一下上面的代码                                                              
        function Person(name,age){
            this.name = name;
            this.age = age;
        }
        Person.prototype.say = function(){
            console.log(this.name);
        }

        let p = mynew(Person,"huihui", 123)
        console.log('p',p);
        
        // Map结构原⽣提供是三个遍历器⽣成函数和⼀个遍历⽅法
        const map = new Map([
            ["foo",1],
            ["bar",2],
        ])

        for (let key of map.keys()){
            console.log(key);
        }
        for (let key of map.values()){
            console.log(key);
        }

        for(let items of map.entries()){
            console.log(items);
        }
        map.forEach((value,key,map)=>{
            console.log(key,value);
        })


        // 将类数组转化为数组
        Array.from(arr)
        // 数组方法 toString(),toLocalString(),join()
        // 尾部pop(),push()
        // 首部 shift().unshift()
        // concat, slice() 
    </script>
</body>
</html>